home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / swapops.h < prev    next >
Text File  |  2005-10-13  |  2KB  |  70 lines

  1. /*
  2.  * swapcache pages are stored in the swapper_space radix tree.  We want to
  3.  * get good packing density in that tree, so the index should be dense in
  4.  * the low-order bits.
  5.  *
  6.  * We arrange the `type' and `offset' fields so that `type' is at the five
  7.  * high-order bits of the smp_entry_t and `offset' is right-aligned in the
  8.  * remaining bits.
  9.  *
  10.  * swp_entry_t's are *never* stored anywhere in their arch-dependent format.
  11.  */
  12. #define SWP_TYPE_SHIFT(e)    (sizeof(e.val) * 8 - MAX_SWAPFILES_SHIFT)
  13. #define SWP_OFFSET_MASK(e)    ((1UL << SWP_TYPE_SHIFT(e)) - 1)
  14.  
  15. /*
  16.  * Store a type+offset into a swp_entry_t in an arch-independent format
  17.  */
  18. static inline swp_entry_t swp_entry(unsigned long type, pgoff_t offset)
  19. {
  20.     swp_entry_t ret;
  21.  
  22.     ret.val = (type << SWP_TYPE_SHIFT(ret)) |
  23.             (offset & SWP_OFFSET_MASK(ret));
  24.     return ret;
  25. }
  26.  
  27. /*
  28.  * Extract the `type' field from a swp_entry_t.  The swp_entry_t is in
  29.  * arch-independent format
  30.  */
  31. static inline unsigned swp_type(swp_entry_t entry)
  32. {
  33.     return (entry.val >> SWP_TYPE_SHIFT(entry));
  34. }
  35.  
  36. /*
  37.  * Extract the `offset' field from a swp_entry_t.  The swp_entry_t is in
  38.  * arch-independent format
  39.  */
  40. static inline pgoff_t swp_offset(swp_entry_t entry)
  41. {
  42.     return entry.val & SWP_OFFSET_MASK(entry);
  43. }
  44.  
  45. /*
  46.  * Convert the arch-dependent pte representation of a swp_entry_t into an
  47.  * arch-independent swp_entry_t.
  48.  */
  49. static inline swp_entry_t pte_to_swp_entry(pte_t pte)
  50. {
  51.     swp_entry_t arch_entry;
  52.  
  53.     BUG_ON(pte_file(pte));
  54.     arch_entry = __pte_to_swp_entry(pte);
  55.     return swp_entry(__swp_type(arch_entry), __swp_offset(arch_entry));
  56. }
  57.  
  58. /*
  59.  * Convert the arch-independent representation of a swp_entry_t into the
  60.  * arch-dependent pte representation.
  61.  */
  62. static inline pte_t swp_entry_to_pte(swp_entry_t entry)
  63. {
  64.     swp_entry_t arch_entry;
  65.  
  66.     arch_entry = __swp_entry(swp_type(entry), swp_offset(entry));
  67.     BUG_ON(pte_file(__swp_entry_to_pte(arch_entry)));
  68.     return __swp_entry_to_pte(arch_entry);
  69. }
  70.